package com.yide.myworld.exception;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.yide.myworld.api_result.IEnumCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.lang.Nullable;

import java.util.Collection;

/**
 * 断言处理类，用于抛出各种API异常
 */
@Slf4j
public class Asserts {
    public static void fail(String message) {
        throw new ApiException(message);
    }

    public static void fail(IEnumCode errorCode) {
        throw new ApiException(errorCode);
    }

    public static void failWithMsg(IEnumCode errorCode,String message){
        throw new ApiException(errorCode,message);
    }

    /**
     * 带异常数据的错误
     * @param errorCode
     * @param errorData
     */
    public static void fail(IEnumCode errorCode, Object errorData) {
        throw new ApiException(errorCode, errorData);
    }

    /**
     * 断言对象不为空
     * @param obj 对象
     * @param message 异常消息
     */
    public static void notNull(Object obj, String message){
        if(ObjectUtil.isNull(obj)){
            log.debug(message);
            throw new ApiException(message);
        }
    }

    public static void notNull(Object obj, IEnumCode errorCode){
        if(ObjectUtil.isNull(obj)){
            log.debug(errorCode.getMessage());
            throw new ApiException(errorCode);
        }
    }

    /**
     * 断言为True
     * @param expression 逻辑表达式
     * @param message 异常消息
     */
    public static void isTrue(boolean expression, String message) {
        if (!expression) {
            log.debug(message);
            throw new ApiException(message);
        }
    }

    /**
     * 断言为True
     * @param expression 逻辑表达式
     * @param message 异常消息
     */
    public static void predict(boolean expression, String message) {
        if (expression) {
            log.debug(message);
            throw new ApiException(message);
        }
    }



    /**
     * 断言集合不为空
     * @param collection 集合
     * @param message 异常消息
     */
    public static void notEmpty(@Nullable Collection<?> collection,String message){
        if (CollUtil.isEmpty(collection)) {
            throw new ApiException(message);
        }
    }
}
